When the workload of a server becomes such that the server is unable to perform the work in a timely manner, the workload may be distributed among multiple servers. Spreading the workload among multiple devices is sometimes referred to as load balancing. Sometimes, load balancing is performed by having a single device receive all requests and determine which server to send the request to. In other load balancing mechanisms, the request may be sent to all of the servers and each server determines whether it should service the request. Other load balancing mechanisms will be apparent to those skilled in the art.
For some applications, it is desirable that communications from the same client go to the same server. This is sometimes called client affinity or simply affinity. For example, if a server is storing shopping cart information related to a client's order and a request from the client is then serviced by another server, the shopping cart information and/or session state may not be available to the other server. Client affinity becomes more complicated in load balanced systems.